var calanderURL = "content://com.android.calendar/calendars";
var calanderEventURL = "content://com.android.calendar/events";
var calanderRemiderURL = "content://com.android.calendar/reminders";
var calId; //日历账户id

// * 获取日历权限 *
function getCalendarJurisdiction() {
	return new Promise((resolve, reject) => {
		// plus.android.requestPermissions(['android.permission.READ_CALENDAR',
		// 		'android.permission.WRITE_CALENDAR'
		// 	],
		plus.android.requestPermissions([
				'android.permission.WRITE_CALENDAR'
			],
			function(e) {
				if (e.deniedAlways.length > 0) { //权限被永久拒绝
					// 弹出提示框解释为何需要定位权限，引导用户打开设置页面开启
					console.log('Always Denied!!! ' + e.deniedAlways.toString());
					reject({
						data: -1,
						message: "权限被永久拒绝了"
					})
				}
				if (e.deniedPresent.length > 0) { //权限被临时拒绝
					reject({
						data: 0,
						message: "权限被临时拒绝了"
					})
					// 弹出提示框解释为何需要定位权限，可再次调用plus.android.requestPermissions申请权限
					console.log('Present Denied!!! ' + e.deniedPresent.toString());
				}
				if (e.granted.length > 0) { //权限被允许
					//调用依赖获取定位权限的代码
					resolve({
						data: 1,
						message: "ok"
					})
				}
			})
	})
}
// 新增日历
/*
第一步 :获取操作日历权限，然后获取app对应的日历账号，如果不存在则调用方法创建日历账号，返回账号ID，即calendar_id
然后通过calendar_id插入日历事件，返回事件ID，根据事件ID 插入日历提醒
*/
function addEvent(Obj) {
	var that = this;
	var Cursor = plus.android.importClass("android.database.Cursor");
	var Uri = plus.android.importClass("android.net.Uri");
	var Calendar = plus.android.importClass("java.util.Calendar");
	var main = plus.android.runtimeMainActivity();
	return new Promise((resolve, reject) => {
		// 模拟异步操作
		setTimeout(() => {
			// 权限查询函数 getCalendarJurisdiction
			that.getCalendarJurisdiction().then(res => {
				// 查询是否有日历账号
				var calendarAccountList = plus.android.invoke(main.getContentResolver(),
					'query', Uri.parse(
						calanderURL), null, null, null, null);
				var count = plus.android.invoke(calendarAccountList,
				"getCount"); //获取账号条数 null或者 数字
				console.log(count, plus.android.invoke(calendarAccountList, 'moveToNext'))
				var tampArr = []
				while (plus.android.invoke(calendarAccountList, 'moveToNext')) {
					let tampObj = {}
					var keyLen = plus.android.invoke(calendarAccountList, 'getColumnCount');
					// console.log(keyLen)
					for (var i = 0; i < keyLen; i++) {
						var tampKey = plus.android.invoke(calendarAccountList, 'getColumnName',
							i);
						var tampVal = plus.android.invoke(calendarAccountList, 'getString', plus
							.android
							.invoke(calendarAccountList,
								'getColumnIndex',
								tampKey));
						tampObj[tampKey] = tampVal;
					}
					tampArr.push(tampObj);
				}
				// console.log(tampArr); //日历账号
				// 查询是否有固定账号
				var isHasAccout = false;
				var accout_id = null;
				tampArr.forEach(item => {
					if (item.name == 'sgj') {
						accout_id = item._id;
						isHasAccout = true;
					}
				})

				// 如果有账号直接写入日历
				if (isHasAccout) {
					Obj.calendar_id = accout_id;
					resolve(that.addEvent_tabel(Obj));

				} else {
					// 添加账号
					accout_id = that.initCalendars();
					// console.log(accout_id)
					Obj.calendar_id = accout_id; //日历账户id
					resolve(that.addEvent_tabel(Obj));
				}
			}).catch(err => {
				resolve(-1)
				console.log(err);
				console.log('被拒绝或被临时拒绝')
			})

		}, 1000);
	});
}
/*
 * 添加日历到表格
 *  calendar_id:日历账户id （不需要自己传进来，或根据账户匹配你首先设置的，得到对应的账户id）
 * 	title:标题
 *  subtitle：副标题
 * 	description：描述 （其实就是备注）
 * dtstart: 开始时间
 * dtend: 结束时间
 * inAdvance：多少分钟前提醒
 */
// 添加日历到表格
function addEvent_tabel(Obj) {
	var Cursor = plus.android.importClass("android.database.Cursor");
	var Uri = plus.android.importClass("android.net.Uri");
	var Calendar = plus.android.importClass("java.util.Calendar");
	var main = plus.android.runtimeMainActivity();

	var TimeZone = plus.android.importClass("java.util.TimeZone");
	var timeZone = TimeZone.getDefault();
	var ContentValues = plus.android.importClass("android.content.ContentValues");
	var values = new ContentValues();
	values.put("calendar_id", Obj.calendar_id);
	values.put("title", Obj.title); //标题
	values.put("eventLocation", Obj.subtitle); //副标题
	values.put("description", Obj.description); //时间描述（就是备注）
	values.put("eventTimezone", plus.android.invoke(timeZone, "getID")); // 这个是时区，必须有，
	values.put("dtstart", Obj.dtstart); //开始时间（时间戳毫秒）
	values.put("dtend", Obj.dtend); //结束时间（时戳毫秒）
	values.put("hasAlarm", 1); //是否闹钟提醒 默认提醒 因为大部分手机未实现此功能 故未实现
	values.put("rrule", Obj.rrule);
	// values.put("duration", Obj.duration);
	var mCalendar = Calendar.getInstance();
	plus.android.invoke(mCalendar, "set", Calendar.HOUR_OF_DAY, 13); //设置小时制  此处为24小时制
	plus.android.invoke(mCalendar, "set", Calendar.MINUTE, 0); //补0
	// 添加事件
	var newEvent = plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse(calanderEventURL),
		values);
	console.log(newEvent);
	// 事件提醒的设定  
	var id = plus.android.invoke(newEvent, 'getLastPathSegment'); //事件的 ID
	console.log(id);
	var remindersObj = new ContentValues();
	remindersObj.put('event_id', id);
	// 提前5分钟有提醒  
	remindersObj.put('minutes', Obj.inAdvance); //多少分钟前提醒
	remindersObj.put('method', '1');
	plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse(calanderRemiderURL), remindersObj);
	console.log('设置提醒成功');

	return id

}
//添加账户  
function initCalendars() {
	var TimeZone = plus.android.importClass("java.util.TimeZone");
	var timeZone = TimeZone.getDefault();
	var ContentValues = plus.android.importClass("android.content.ContentValues");
	var value = new ContentValues();
	var Calendars = plus.android.importClass("android.provider.CalendarContract.Calendars");
	value.put("name", "sgj"); //csw
	value.put("account_name", "sgj520@163.com");
	// value.put("account_type", "com.android.exchange");
	value.put("account_type", "LOCAL");
	value.put("calendar_displayName", "sgj"); //csw
	value.put("visible", 1);
	value.put("calendar_color", "-9206951");
	value.put("calendar_access_level", "700");
	value.put("sync_events", 1);
	value.put("calendar_timezone", plus.android.invoke(timeZone, "getID"));
	value.put("ownerAccount", "sgj520@163.com");
	value.put("canOrganizerRespond", 0);
	var Uri = plus.android.importClass("android.net.Uri");
	var calendarUri = Uri.parse(calanderURL);
	var buildUpon = plus.android.invoke(calendarUri, "buildUpon");
	var CalendarContract = plus.android.importClass("android.provider.CalendarContract");
	plus.android.invoke(buildUpon, "appendQueryParameter", CalendarContract.CALLER_IS_SYNCADAPTER, "true");
	plus.android.invoke(buildUpon, "appendQueryParameter", "account_name", "sgj520@163.com");
	plus.android.invoke(buildUpon, "appendQueryParameter", "account_type", "LOCAL");
	calendarUri = plus.android.invoke(buildUpon, "build");
	var newAccoutList = plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert",
		calendarUri,
		value);

	var newAccout_id;
	newAccout_id = plus.android.invoke(plus.android.invoke(newAccoutList, "getPathSegments"), "get", 1);
	return newAccout_id;
}
/*
 * cs 2020-9-28
 * 删除日历
 * event_id 事件的ID
 * success 成功回调
 * error 失败回调
 */
function deleteEvent(event_id) {
	console.log(111, event_id)
	var that = this;
	var Uri = plus.android.importClass("android.net.Uri");
	var main = plus.android.runtimeMainActivity();
	var ContentUris = plus.android.importClass('android.content.ContentUris');
	that.getCalendarJurisdiction().then(res => {
		try {
			var deleteUri = ContentUris.withAppendedId(Uri.parse(calanderEventURL), event_id);
			var rows = plus.android.invoke(main.getContentResolver(), "delete", deleteUri, null, null);
			console.log("deleteEvent"+rows)
		} catch (e) {
			console.log(e)
			//TODO handle the exception
		}
	}).catch(err => {})
}
/*
 * 查询日历
 */
function queryEvent(Obj) {
	console.log(55);
	var that = this;
	var Uri = plus.android.importClass("android.net.Uri");
	var main = plus.android.runtimeMainActivity();
	return new Promise((resolve, reject) => {
		that.getCalendarJurisdiction().then(res => {
			var userCursor = plus.android.invoke(main.getContentResolver(), "query", Uri.parse(
				calanderEventURL), null, null, null, null);

			var count = plus.android.invoke(userCursor, "getCount");
			var tampArr = []
			while (plus.android.invoke(userCursor, 'moveToNext')) {
				let tampObj = {}
				var keyLen = plus.android.invoke(userCursor, 'getColumnCount');
				for (var i = 0; i < keyLen; i++) {
					var tampKey = plus.android.invoke(userCursor, 'getColumnName', i);
					var tampVal = plus.android.invoke(userCursor, 'getString', plus.android
						.invoke(
							userCursor, 'getColumnIndex',
							tampKey));
					tampObj[tampKey] = tampVal;
				}
				tampArr.push(tampObj);
			}
			console.log(tampArr)
			resolve(tampArr)
		}).catch(err => {
			reject([])
		})
	})
}
export default {
	getCalendarJurisdiction,
	addEvent,
	addEvent_tabel,
	initCalendars,
	deleteEvent,
	queryEvent


}